from flask import Blueprint, render_template
from flask_socketio import emit
from app.extensions import socketio

video_player_bp = Blueprint('video_player_bp', __name__)

# 存储当前播放状态（全局共享），有能力的大佬再改进下
current_state = {
    'progress': 0,  # 播放进度（秒）
    'status': 'pause',  # 状态：play/pause
    'video_url': '',  # 当前播放的视频地址
    'format': 'auto',  # 视频格式
    'volume': 1.0,  # 音量
    'muted': False  # 是否静音
}

# 跟踪连接的客户端数量
client_count = 0


@socketio.on('connect')
def handle_connect():
    """新客户端连接时，同步当前状态并更新客户端计数"""
    global client_count
    client_count += 1
    emit('sync_state', current_state)
    # 广播更新的观看人数
    socketio.emit('viewer_count', client_count)


@socketio.on('disconnect')
def handle_disconnect():
    """客户端断开连接时，更新客户端计数"""
    global client_count
    client_count -= 1
    if client_count < 0:
        client_count = 0
    # 广播更新的观看人数
    socketio.emit('viewer_count', client_count)


@socketio.on('update_state')
def handle_update(data):
    """接收客户端的状态更新，广播给所有客户端"""
    global current_state
    # 更新状态（只保留需要同步的字段）
    current_state.update({
        'progress': data.get('progress', current_state['progress']),
        'status': data.get('status', current_state['status']),
        'video_url': data.get('video_url', current_state['video_url']),
        'format': data.get('format', current_state['format']),
        'volume': data.get('volume', current_state['volume']),
        'muted': data.get('muted', current_state['muted'])
    })
    # 广播给所有客户端（除发送者）
    emit('sync_state', current_state, broadcast=True, include_self=False)


@video_player_bp.route('/video_player')
def index():
    """视频播放页面"""
    return render_template('video_player.html')
